﻿namespace Central.Linq {

	/// <summary>
	/// Класс настроек сортировки для запроса MultiQueryResult
	/// </summary>
	public class SortDefinition {

		/// <summary>
		/// Конструктор
		/// </summary>
		public SortDefinition() {
			this.Value = Sort.Ascending;
			this.Name = "";
		}

		/// <summary>
		/// Конструктор
		/// </summary>
		/// <param name="name">имя свойства</param>
		public SortDefinition(string name) {
			this.Value = Sort.Ascending;
			this.Name = name;
		}

		/// <summary>
		/// Наименование параметра
		/// </summary>
		public string Name { get; set; }

		/// <summary>
		/// Значение параметра
		/// </summary>
		public Sort Value { get; set; }

		#region методы

		/// <summary>
		/// сравнение объектов
		/// </summary>
		/// <returns></returns>
		public override bool Equals(object obj) {
			return Equals(obj as SortDefinition);
		}

		/// <summary>
		/// сравнение объектов SortDefinition
		/// </summary>
		/// <param name="other"></param>
		/// <returns></returns>
		public bool Equals(SortDefinition other) {
			if (other == null)
				return false;

			return other.Name.Equals(this.Name) && other.Value.Equals(this.Value);
		}

		/// <summary>
		/// получение Hash кода объекта SortDefinition
		/// </summary>
		/// <returns></returns>
		public override int GetHashCode() {
			//Calculate the hash code
			return this.Name.GetHashCode() ^ this.Value.GetHashCode();
		}

		#endregion методы
	}
}